package psd.scala.rules
import scala.collection.mutable
import scala.collection.JavaConversions._
import psd.model.Bug
import org.eclipse.jdt.core.dom.Modifier
import psd.scala.FactDb
import psd.scala.facts.FieldDefT

class PublicStaticNoFinalVariables (description: String) extends AbstractRule (description){
 
  def execute(db: FactDb): mutable.ArrayBuffer[Bug]= {
    
   	 val fieldDefTList = db.fieldDefTList
   	 
   	 val result = new mutable.ArrayBuffer[Bug]
   	 
   	   	 for ( fd <- fieldDefTList ) {
   	   	   if (Modifier.isPublic(fd.modifier) && Modifier.isStatic(fd.modifier) && !Modifier.isFinal(fd.modifier)){
	   				 val bug = new Bug
				     bug.set_lineNumber(fd.line.toInt)
				     bug.set_path(fd.path)
			    	 bug.set_ruleName(this.getClass().toString())
			    	 bug.set_description(this.description)
			    	 result+=bug
	   		}
	   		 
	   	 }
	   	 return result
	  }
  }
